#ifndef __CASE_TPL_LOG_H__
#define __CASE_TPL_LOG_H__

#include <gtest/gtest.h>
#include "basic/log.h"

TEST(TestLog, debug) {
  M_LOG_DEBUG("da jia hao")
  M_LOG_DEBUG("da jia hao", "aa")
  M_LOG_DEBUG("da jia hao", "a", "b")
  M_LOG_DEBUG("da jia hao", "a", "b", "c")
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d")
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e")
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f")
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g")

  const std::string _s("1", 10);
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s)
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s.c_str())
  const int _i{10};
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i)
  const float _f{11.1f};
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f)
  const bool _b{true};
  M_LOG_DEBUG("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f, _b)

  M_LOG_DEBUG_IF(true, "message if true")
  M_LOG_DEBUG_IF(false, "message if false")
  M_LOG_DEBUG_IF((bool)_i == _b, "message if (bool)_i == _b")
  M_LOG_DEBUG_IF(1 + 2 == 3, "message if 1+2==3")
  M_LOG_DEBUG_IF("false", "message if 'false'")
}

TEST(TestLog, info) {
  M_LOG_INFO("da jia hao")
  M_LOG_INFO("da jia hao", "aa")
  M_LOG_INFO("da jia hao", "a", "b")
  M_LOG_INFO("da jia hao", "a", "b", "c")
  M_LOG_INFO("da jia hao", "a", "b", "c", "d")
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e")
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f")
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g")

  const std::string _s("1", 10);
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s)
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s.c_str())
  const int _i{10};
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i)
  const float _f{11.1f};
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f)
  const bool _b{true};
  M_LOG_INFO("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f, _b)

  M_LOG_INFO_IF(true, "message if true")
  M_LOG_INFO_IF(false, "message if false")
  M_LOG_INFO_IF((bool)_i == _b, "message if (bool)_i == _b")
  M_LOG_INFO_IF(1 + 2 == 3, "message if 1+2==3")
  M_LOG_INFO_IF("false", "message if 'false'")
}

TEST(TestLog, warn) {
  M_LOG_WARN("da jia hao")
  M_LOG_WARN("da jia hao", "aa")
  M_LOG_WARN("da jia hao", "a", "b")
  M_LOG_WARN("da jia hao", "a", "b", "c")
  M_LOG_WARN("da jia hao", "a", "b", "c", "d")
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e")
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f")
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g")

  const std::string _s("1", 10);
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s)
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s.c_str())
  const int _i{10};
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i)
  const float _f{11.1f};
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f)
  const bool _b{true};
  M_LOG_WARN("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f, _b)

  M_LOG_WARN_IF(true, "message if true")
  M_LOG_WARN_IF(false, "message if false")
  M_LOG_WARN_IF((bool)_i == _b, "message if (bool)_i == _b")
  M_LOG_WARN_IF(1 + 2 == 3, "message if 1+2==3")
  M_LOG_WARN_IF("false", "message if 'false'")
}

TEST(TestLog, error) {
  M_LOG_ERROR("da jia hao")
  M_LOG_ERROR("da jia hao", "aa")
  M_LOG_ERROR("da jia hao", "a", "b")
  M_LOG_ERROR("da jia hao", "a", "b", "c")
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d")
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e")
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f")
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g")

  const std::string _s("1", 10);
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s)
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s.c_str())
  const int _i{10};
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i)
  const float _f{11.1f};
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f)
  const bool _b{true};
  M_LOG_ERROR("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f, _b)

  M_LOG_ERROR_IF(true, "message if true")
  M_LOG_ERROR_IF(false, "message if false")
  M_LOG_ERROR_IF((bool)_i == _b, "message if (bool)_i == _b")
  M_LOG_ERROR_IF(1 + 2 == 3, "message if 1+2==3")
  M_LOG_ERROR_IF("false", "message if 'false'")
}

TEST(TestLog, fatal) {
  M_LOG_FATAL("da jia hao")
  M_LOG_FATAL("da jia hao", "aa")
  M_LOG_FATAL("da jia hao", "a", "b")
  M_LOG_FATAL("da jia hao", "a", "b", "c")
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d")
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e")
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f")
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g")

  const std::string _s("1", 10);
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s)
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s.c_str())
  const int _i{10};
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i)
  const float _f{11.1f};
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f)
  const bool _b{true};
  M_LOG_FATAL("da jia hao", "a", "b", "c", "d", "e", "f", "g", _s, _i, _f, _b)

  M_LOG_FATAL_IF(true, "message if true")
  M_LOG_FATAL_IF(false, "message if false")
  M_LOG_FATAL_IF((bool)_i == _b, "message if (bool)_i == _b")
  M_LOG_FATAL_IF(1 + 2 == 3, "message if 1+2==3")
  M_LOG_FATAL_IF("false", "message if 'false'")
}

#endif
